import axios from 'axios'
// import qs from 'qs'
// import Store from "@/store";
// import Cookies from 'js-cookie'
import { ElMessage } from 'element-plus'

// 创建axios实例
const Axios = axios.create({
  // 本地开发环境走proxy代理，其他环境不走代理
  // baseURL: process.env.VUE_APP_API_ENV === 'development' ? '/api' : '/',
  timeout: 1200000, // 请求超时时间(毫秒)
  // withCredentials: true, // 跨域请求时是否需要使用凭证
  headers: {
    'Content-Type': 'application/json;charset=UTF-8'
  }
  // 请求URL中统一添加公共get参数数据
  // params: {
  //   token: "",
  //   menuCode: "",
  //   encrypt: 0
  // }
})

// 请求拦截器设置
Axios.interceptors.request.use(
  config => {
    // config.headers['Content-Type'] = "application/json;charset=UTF-8"
    // config.headers['ut'] = Cookies.get('ut')
    // if (process.env.NODE_ENV === 'development') {
    //   config.headers['ut'] =
    //     Cookies.get('ut') || 'a17351bcc7d74eb3ae41161f0fb13339'
    // }

    // // 令牌赋值
    // config.params.token = Store.state.app.token;
    // // 模块编码赋值
    // config.params.menuCode = Store.state.app.moduleCode;
    // // 是否开启请求参数加密
    // if (config.params.encrypt) {
    //   config.data = {
    //     encrypt: Utils.encrypt(config.data, Store.state.app.ivparameter, Store.state.app.encryptKey)
    //   };
    // }
    return config
  },
  error => Promise.reject(error)
)

// 响应拦截器设置
Axios.interceptors.response.use(
  res => {
    // console.log(444, res)
    // if ((res.data && ["0", "200"].includes(res.data.code)) || res.data.success) {
    if (res.data) {
      return res.data
    } else {
      ElMessage.error({
        message: res.data.errorMsg || res.data.message || '未知错误',
        grouping: true,
        showClose: true,
        duration: 5000
      })
      return Promise.reject(res.data)
    }
  },
  error => {
    console.error(error)
    // 网络请求错误提示
    let message = ''
    if (error && error.response) {
      switch (error.response.status) {
        case 400:
          message = `请求错误: 400`
          break
        case 401:
          message = `未授权，请登录: 401`
          break
        case 403:
          message = `拒绝访问: 403`
          break
        case 404:
          message = `请求地址出错: 404`
          break
        case 408:
          message = `请求超时: 408`
          break
        case 500:
          message = `服务器内部错误: 500`
          break
        case 501:
          message = `服务未实现: 501`
          break
        case 502:
          message = `网关错误: 502`
          break
        case 503:
          message = `服务不可用: 503`
          break
        case 504:
          message = `网关超时: 504`
          break
        case 505:
          message = `HTTP版本不受支持: 505`
          break
        default:
      }
    } else {
      // 超时判断
      message = '网络请求超时！'
    }
    ElMessage.error({
      message,
      grouping: true,
      showClose: true,
      duration: 3000
    })

    return Promise.reject(error)
  }
)

export default function request(options: any) {
  const { method = 'get', data = {}, url = '' } = options
  console.log(111, options)

  switch (method.toLowerCase()) {
    case 'get':
      return Axios.get(url, { params: data })
    case 'delete':
      return Axios.delete(url, { params: data })
    case 'head':
      return Axios.head(url, data)
    case 'post':
      return Axios.post(url, data)
    case 'put':
      return Axios.put(url, data)
    case 'patch':
      return Axios.patch(url, data)
    default:
      return Axios(options)
  }
}
